<!DOCTYPE html >
<html>

<head>
    <title>beantools home page</title>

    <meta http-equiv="content-Type" content="text/html;charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="keywords" content="beantools,java frame,属性,property,field,java,frame,克隆,clone,加签,sign,自主研发，中国程序员">
    <meta name="description" content="这是展示beantools框架的首页，beantools是由中国程序员自主开发的java框架。它的功能主要用来操作对象属性。">
    <meta name="author" content="zby,baoya,zbone,baoya@www.superjson.com">
    <meta name="robots" content="all">
    <meta http-equiv="Content-Language" content="zh-cn"/>


    <link href="img/ico/favicon2.ico" rel="shortcut icon">
    <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
    <!--<link href="css/plugins/netdna/bootstrap.css" rel="stylesheet">-->
    <link rel="stylesheet" href="css/plugins/summernote/summernote.css" type="text/css">
    <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
    <link href='https://fonts.googleapis.com/css?family=Kaushan+Script' rel='stylesheet' type='text/css'>
    <link href='https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic,700italic' rel='stylesheet'
          type='text/css'>
    <link href='https://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700' rel='stylesheet' type='text/css'>
    <link href="css/plugins/swiper.css" rel="stylesheet" type="text/css">
    <link href="css/plugins/swiper.min.css" rel="stylesheet" type="text/css">
    <link href="css/agency.min.css" rel="stylesheet" type="text/css">

    <script src="vendor/jquery/jquery.js" type="text/javascript"></script>

    <style type="text/css">
        .btn-white {
            background-color: white !important;
        }

        #signInForm input::-webkit-input-placeholder, #loginForm input::-webkit-input-placeholder {
            color: #c9cad3;
            font: normal 13px/20px '宋体';
        }

        #signInForm input::-moz-placeholder, #loginForm input::-moz-placeholder {
            color: #c9cad3;
            font: normal 13px/20px '宋体';
        }

        #signInForm input::-ms-input-placeholder, #loginForm input::-ms-input-placeholder {
            color: #c9cad3;
            font: normal 13px/20px '宋体';
        }
    </style>
</head>

<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-dark fixed-top" id="mainNav">
    <div class="container">
        <a class="navbar-brand js-scroll-trigger" href="#page-top">beantools frame</a>
        <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse"
                data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false"
                aria-label="Toggle navigation">
            菜单
            <i class="fas fa-bars"></i>
        </button>
        <div class="collapse navbar-collapse" id="navbarResponsive">
            <ul class="navbar-nav text-uppercase ml-auto">
                <li class="nav-item">
                    <a class="nav-link js-scroll-trigger" href="#page-top">首页</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link js-scroll-trigger" href="javadoc/index.html">API</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link js-scroll-trigger" href="#introduce">介绍</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link js-scroll-trigger" href="#demo">演示</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link js-scroll-trigger" href="#sharpComm">锐评</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link js-scroll-trigger" href="#team">团队</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link js-scroll-trigger" href="#contact">联系我们</a>
                </li>
                <li class="nav-item" id="loginLi">
                    <a class="nav-link js-scroll-trigger " data-toggle="modal" data-target="#loginModal"
                       href="JavaScript:void(0)">登录</a>
                </li>
                <li class="nav-item" id="signInLi">
                    <a class="nav-link js-scroll-trigger" data-toggle="modal" data-target="#signInModal"
                       href="JavaScript:void(0)">注册</a>
                </li>
                <li class="nav-item" id="userInfo" style="display: none">
                    <span class="nav-link js-scroll-trigger"></span>
                </li>
                <li class="nav-item" id="logOutLi" style="display: none">
                    <a class="nav-link js-scroll-trigger " href="JavaScript:void(0)" onclick="Utils.logOut()">退出</a>
                </li>
            </ul>
        </div>
    </div>
</nav>

<!--注册界面-->
<div class="modal fade" id="signInModal" tabindex="-8" role="dialog" aria-labelledby="signInModalLabel"
     aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h6 class="modal-title font-weight-light" id="signInModalLabel">注册</h6>
                <button type="button" class="close" data-dismiss="modal"
                        aria-hidden="true">×
                </button>
            </div>
            <div class="modal-body">
                <form id="signInForm" class="form-horizontal" role="form" novalidate="novalidate">
                    <div class="form-group ">
                        <div>
                            <input class="form-control" name="phone" type="tel" placeholder="手机号码" required="required" maxlength="11">
                        </div>
                    </div>
                    <div class="form-group">
                        <input class=" form-control" id="password" name="password" type="password" placeholder="密码"
                               required="required">
                    </div>
                    <div class="form-group">
                        <input class=" form-control" id="definePassword" name="definePassword" type="password"
                               placeholder="确认密码" required="required">
                    </div>
                    <div class="form-group">
                        <input class=" form-control" id="programmingLanguage" name="programmingLanguage" type="text"
                               placeholder="擅长语言" required="required">
                    </div>
                    <div class="radio">
                        <label> 用户类型：
                            <input type="radio" name="signInType" value="SIGN_IN_TYPE_ENTERPRISE" checked
                                   onclick="fns.chooseType(this)">企业
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                            <input type="radio" name="signInType" value="SIGN_IN_TYPE_PERSONAL"
                                   onclick="fns.chooseType(this)">个人
                        </label>
                    </div>
                    <div class="form-group">
                        <input class=" form-control" id="companyName" name="companyName" type="text" placeholder="企业名称">
                    </div>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-sm btn-white col-sm-2" onclick="Utils.signIn(this)">注册</button>
                <button type="button" class="btn btn-sm btn-white col-sm-4 font-italic"
                        style="font-size: 9px;color: gray" onclick="Utils.goLogin(this)">已有账号，前去登录?
                </button>
            </div>
        </div>
    </div>
</div>

<!--登录界面-->
<div class="modal fade" id="loginModal" tabindex="-8" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h6 class="modal-title font-weight-lighter " id="myModalLabel">登录</h6>
                <button type="button" class="close" data-dismiss="modal"
                        aria-hidden="true">×
                </button>

            </div>
            <div class="modal-body">
                <form id="loginForm" class="form-horizontal" role="form" novalidate="novalidate">
                    <div class="form-group">
                        <input class="form-control" name="phoneOrAccName" type="text" placeholder="手机号" required="required">
                    </div>
                    <div class="form-group">
                        <input class=" form-control" id="loginPassword" name="loginPassword" type="password"
                               placeholder="密码" required="required">
                    </div>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-sm btn-white col-sm-2 col-sm-offset-7" onclick="Utils.logIn(this)">登录</button>
                <button type="button" class="btn btn-sm btn-white col-sm-4 font-italic"
                        style="font-size: 9px;color: gray" onclick="Utils.goSinIn(this)">没有账号，前去注册?
                </button>
            </div>
        </div>
    </div>
</div>
<!-- Header -->
<header class="masthead" style="height: 100%;" id="download">
    <div class="container">
        <div class="intro-text">
            <div class="intro-lead-in">欢迎每一位热爱技术的开发者</div>
            <div class="intro-heading text-uppercase">这是一个java的崭新框架</div>
            <a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="javascript:void(0)" cflag="download" :cid="attach.id">下载框架：{{attach.name}}</a>
            <!--<a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="javascript:void(0)" cflag="download">下载框架：beantools.jar</a>-->
            &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;
            <a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="mainPro.html">了解更多...</a>
        </div>
    </div>
</header>

<!-- introduce -->
<section class="page-section" id="introduce">
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h2 class="section-heading text-uppercase">框架介绍</h2>
                <h3 class="section-subheading text-muted">这是一个精心设计的框架</h3>
            </div>
        </div>
        <div class="row text-center">
            <div class="col-md-4">
          <span class="fa-stack fa-4x">
            <i class="fas fa-circle fa-stack-2x text-primary"></i>
            <i class="fas fa-laptop fa-stack-1x fa-inverse"></i>
          </span>
                <h4 class="service-heading">属性值操作</h4>
                <p class="text-muted">假如，你是<code>Java</code>语言的后端程序员，前端向你发送一个接口，希望获取某个对象的特定的属性值。比如你有一个项目类，
                    项目有一个用户类的属性，你需要向前端传输这个项目用户的名称和电话号码即可，没必要将所有的属性传递给前端。同时，你还可以实现对当前对象属性值
                    的添加。比如前端给你传用户名字，但是，项目的用户并没有实例化对象，程序会自动实例化该对象，就如
                    <a href="https://www.baidu.com/link?url=LKp9nTiDHrH3YZe_rgGIK7uyhOM1rFKDNh7yO66QJR3&wd=&eqid=eb4fa3c90008b581000000065ce9732f">spring</a>的自动填充。
                </p>
            </div>
            <!--<div class="col-md-4">-->
            <!--<span class="fa-stack fa-4x">-->
            <!--<i class="fas fa-circle fa-stack-2x text-primary"></i>-->
            <!--<i class="fas fa-laptop fa-stack-1x fa-inverse"></i>-->
            <!--</span>-->
            <!--<h4 class="service-heading">对象克隆</h4>-->
            <!--<p class="text-muted">假如，你自定义一个实体类。该类中嵌套你定义的其他实体类，同时，它又嵌套你定义的另外实体类，如此循环下去……但是，-->
            <!--你只想获取当前类和其他类的某些属性值，并将其封装成一个新的类，并向前端传递该新类的实例化对象。于是 你可以使用该框架的对象克隆技术，-->
            <!--其有几个方法，分别返回给你一个对象，对象的容器...</p>-->
            <!--</div>-->
            <div class="col-md-4">
          <span class="fa-stack fa-4x">
            <i class="fas fa-circle fa-stack-2x text-primary"></i>
            <i class="fas fa-laptop fa-stack-1x fa-inverse"></i>
          </span>
                <h4 class="service-heading">非空注解</h4>
                <p class="text-muted">假如，你自定义一个实体类，但是，当前端调用后端的接口，并传递实体类的封装对象。但是，你希望实体类中某些属性不为空，
                    或某些属性为空，你也希望该类所继承的父类属性值也不为空， 或父类的属性值为空。你可以调用该框架的<code>NotNullHandler.getInstance().validate(obj);
                    </code>方法，来验证实体类中指定的属性是否为空，或者不为空。。。</p>
            </div>
            <!--<div class="col-md-4">-->
            <!--<span class="fa-stack fa-4x">-->
            <!--<i class="fas fa-circle fa-stack-2x text-primary"></i>-->
            <!--<i class="fas fa-laptop fa-stack-1x fa-inverse"></i>-->
            <!--</span>-->
            <!--<h4 class="service-heading">数字加签</h4>-->
            <!--<p class="text-muted">我们在调用第三方的接口时，比如第三方支付接口、验证银行卡接口、短信验证码接口……其往往都需要加密。加密的前提，是生成签名原串。-->
            <!--或许，你可以使用<code>SignUtil.signJsonSrc(boolean, String, JSONObject)</code>方法，当然，除了这个方法，该类也提供很多方法。同时，其内部以-->
            <!--高性能的的方式实现了排序， 满足大多数生成第三方签名原串的需求。。。</p>-->
            <!--</div>-->
            <div class="col-md-4">
          <span class="fa-stack fa-4x">
            <i class="fas fa-circle fa-stack-2x text-primary"></i>
            <i class="fas fa-laptop fa-stack-1x fa-inverse"></i>
          </span>
                <h4 class="service-heading"></h4><br>
                <p class="text-muted">
                    <a class="btn btn-primary btn-xl text-uppercase js-scroll-trigger" href="mainPro.html">了解更多...</a>
                </p>
            </div>
        </div>
    </div>
</section>

<!-- demo Grid -->
<section class="bg-light page-section" id="demo">
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h2 class="section-heading text-uppercase">举例</h2>
                <h3 class="section-subheading text-muted">以下是该框架的部分例子，仅供参考；若想有根多了解，请参考
                    <a href="javadoc/index.html">API</a>
                </h3>
            </div>
        </div>
        <div class="row">
            <div class="col-md-4 col-sm-6 portfolio-item">
                <a class="portfolio-link" data-toggle="modal" href="#propGetModal">
                    <div class="portfolio-hover">
                        <div class="portfolio-hover-content">
                            <i class="fas fa-plus fa-3x"></i>
                        </div>
                    </div>
                    <img class="img-fluid" src="img/frameEg/propOper/propGet1.png" alt="获取属性值">
                </a>
                <div class="portfolio-caption">
                    <h4>获取属性值</h4>
                    <p class="text-muted">获取实例化对象的属性值</p>
                </div>
            </div>
            <div class="col-md-4 col-sm-6 portfolio-item">
                <a class="portfolio-link" data-toggle="modal" href="#propSetModal">
                    <div class="portfolio-hover">
                        <div class="portfolio-hover-content">
                            <i class="fas fa-plus fa-3x"></i>
                        </div>
                    </div>
                    <img class="img-fluid" src="img/frameEg/propOper/propSet1.png" alt="填充属性值">
                </a>
                <div class="portfolio-caption">
                    <h4>填充属性值</h4>
                    <p class="text-muted">填充实例化对象的属性值</p>
                </div>
            </div>
            <div class="col-md-4 col-sm-6 portfolio-item">
                <a class="portfolio-link" data-toggle="modal" href="#notNullModal">
                    <div class="portfolio-hover">
                        <div class="portfolio-hover-content">
                            <i class="fas fa-plus fa-3x"></i>
                        </div>
                    </div>
                    <img class="img-fluid" src="img/frameEg/notNull/notnull1.png" alt="not null annotation">
                </a>
                <div class="portfolio-caption">
                    <h4>notNull注解</h4>
                    <p class="text-muted">可指定哪些属性允许为空，或哪些属性不为空</p>
                </div>
            </div>
            <div class="col-md-4 col-sm-6 portfolio-item">
                <a class="portfolio-link" data-toggle="modal" href="#cloneModal">
                    <div class="portfolio-hover">
                        <div class="portfolio-hover-content">
                            <i class="fas fa-plus fa-3x"></i>
                        </div>
                    </div>
                    <img class="img-fluid" src="img/frameEg/clone/clone1.png" alt="克隆对象">
                </a>
                <div class="portfolio-caption">
                    <h4>克隆对象</h4>
                    <p class="text-muted">根据对象或类字面常量克隆对象或对象集</p>
                </div>
            </div>
            <div class="col-md-4 col-sm-6 portfolio-item">
                <a class="portfolio-link" data-toggle="modal" href="#portfolioModal5">
                    <div class="portfolio-hover">
                        <div class="portfolio-hover-content">
                            <i class="fas fa-plus fa-3x"></i>
                        </div>
                    </div>
                    <img class="img-fluid" src="img/frameEg/sign/sign1.png" alt="签名原串">
                </a>
                <div class="portfolio-caption">
                    <h4>签名原串</h4>
                    <p class="text-muted">这是生成各种方式的签名原串</p>
                </div>
            </div>
            <div class="col-md-4 col-sm-6 portfolio-item">
                <a class="portfolio-link" href="javadoc/index.html">
                    <div class="portfolio-hover">
                        <div class="portfolio-hover-content">
                            <i class="fas fa-plus fa-3x"></i>
                        </div>
                    </div>
                    <img class="img-fluid" src="img/frameEg/api.png" alt="api">
                </a>
                <div class="portfolio-caption">
                    <h4>API </h4>
                    <p class="text-muted">有关框架beantools的更多用法，请参开<code>API</code></p>
                </div>
            </div>
        </div>
    </div>
</section>

<!-- sharpComm -->
<section class="page-section" id="sharpComm">
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h2 class="section-heading text-uppercase">锐评</h2>
                <h3 class="section-subheading text-muted">个人或公司使用该框架后，纷纷发出了一些中肯的评论。由于评论的人或公司太多，无法全部列出，特选出四个评论，以供大家参考
                    <br><br><strong style="font-size: 15px;color: red">有关国外的评论已翻译</strong></h3>
            </div>
        </div>
        <div class="row">
            <div class="col-lg-12">
                <ul class="timeline">
                    <li>
                        <div class="timeline-image">
                            <img class="rounded-circle img-fluid" src="img/headProfile/h1.png" alt="蹦跶的程序猿">
                        </div>
                        <div class="timeline-panel">
                            <div class="timeline-heading">
                                <h4>2019-05-28 11:44</h4>
                                <h4 class="subheading">杭州 - 浙江 - 中国</h4>
                            </div>
                            <div class="timeline-body">
                                <p class="text-muted">这个框架以前没见过，最近才发现的一个框架，并应用到项目当中。忽然发现，我曾经在做java开发时，不喜欢过滤数据。当前端
                                    程序员调用我后端的接口，把什么东西都返回给前端，导致前端看到的数据非常多。这个框架内部封装了以<code>jsonObject</code>方式
                                    返回的过滤方法，你可以参考<code>PropertyFilters</code>这个过滤器。同时，令我感到意外的是，其也把Javadoc展示出来，而且，Javadoc写的也比较规范，
                                    俨然一种国际范，哈哈。。。
                                </p>
                            </div>
                        </div>
                    </li>
                    <li class="timeline-inverted">
                        <div class="timeline-image">
                            <img class="rounded-circle img-fluid" src="img/headProfile/h2.png" alt="༺༺༺Bruce༻༻༻">
                        </div>
                        <div class="timeline-panel">
                            <div class="timeline-heading">
                                <h4>2019-05-29 11:56</h4>
                                <h4 class="subheading">班加罗尔 - 卡纳塔克邦 - 印度 </h4>
                            </div>
                            <div class="timeline-body">
                                <p class="text-muted">说实话,<a href="https://github.com/">github</a>上也有中国程序员开源的框架，但绝大多数是在别人的地基上盖房子，
                                    很少自己去打地基。 这个框架不能说比其他框架好很多，但是，至少是中国程序员的打的地基，而且是一位年轻的程序员开发的框架。也许，受最近的美国对
                                    <a href="https://www.huawei.com/cn/?ic_medium=direct&ic_source=surlent">华为</a>
                                    的影响。中国新一代程序员有了一定的认知，需要构建自己
                                    国家的底层框架，不能凡是 都依赖国外的框架。别人的东西再好，那也是别人的。也能看出来，中国新一代程序员在逐渐构建底层知识网，不再是简单地使用他人的框架。
                                    希望中国底层软件越来越发达，祝愿华为越来越强。</p>
                            </div>
                        </div>
                    </li>
                    <li>
                        <div class="timeline-image">
                            <img class="rounded-circle img-fluid" src="img/headProfile/h3.png" alt="科技感十足">
                        </div>
                        <div class="timeline-panel">
                            <div class="timeline-heading">
                                <h4>2019-05-28 23:00</h4>
                                <h4 class="subheading">张江高科技园区 - 上海 -中国</h4>
                            </div>
                            <div class="timeline-body">
                                <p class="text-muted">这是一篇<a href="https://www.java.com/zh_CN/">java</a>框架。其优点类似于<a
                                        href="http://commons.apache.org/proper/commons-beanutils/">commons-beanutils</a>
                                    但又比该框架丰富了很多，比如对容器和数组的去空、判空等操作，对加签前的各种方式的签名原串、当前对象的克隆和新类的克隆……我听说这是一个年轻的程序员，从底层去开发的一个框架。
                                    从底层开发框架是件很不容易的事，我挺佩服这个年轻的程序员。我们很多的GitHub上的框架，都是别人打好底层之后，只是各种框架的整合而已。这款是完完全全的底层框架。我自己也想开发底层框架
                                    ，但是我技术达不到，希望越来也多有能力的中国程序员，完完全全建设我们国家的底层科技，不再是在别人的底层框架上盖房子。同时，该框架整合阿里巴巴的
                                    <a href="https://mvnrepository.com/artifact/com.alibaba/fastjson">fastjson</a>，但用的不多，只是存储过滤后的数据而已。
                                </p>
                            </div>
                        </div>
                    </li>
                    <li class="timeline-inverted">
                        <div class="timeline-image">
                            <img class="rounded-circle img-fluid" src="img/headProfile/h4.png" alt="热爱生活呀">
                        </div>
                        <div class="timeline-panel">
                            <div class="timeline-heading">
                                <h4>2019-05-29 10:00</h4>
                                <h4 class="subheading">中关村 -北京 - 中国</h4>
                            </div>
                            <div class="timeline-body">
                                <p class="text-muted">我国在java领域开源的框架很多，但是，开源的底层框架很少。除了阿里巴巴开源的底层框架，很少能找到其他所开源的底层框架。
                                    大部分公司都是在别人的沙滩上盖城堡，而且装修的非常精美，但满天海水席卷而来时，这些城堡便化为乌有。可能，当代年轻的程序员，受到美国对华为的
                                    影响，开始慢慢地觉醒了。我们应该开源更多的底层框架，打牢底层科技，这样，才能飞得更远。这个框架不算特别优秀，但是，这是新一代程序员的成果。
                                    我相信，这个框架还会不断地迭代，一定会将其优化地更好。我也相信我们的底层科技会更好。因为新一代的程序员。
                                </p>
                            </div>
                        </div>
                    </li>
                    <li class="timeline-inverted">
                        <div class="timeline-image">
                            <h4>我们的
                                <br>精彩
                                <br>正继续</h4>
                        </div>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</section>

<!-- Team -->
<section class="bg-light page-section" id="team">
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h2 class="section-heading text-uppercase">༻༻༻我们的团队༻༻༻</h2>
                <h3 class="section-subheading text-muted">团队中的大牛很多，但无法一一列出</h3>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-4">
                <div class="team-member">
                    <img class="mx-auto rounded-circle" src="img/team/t1.png" alt="">
                    <h4>爱代码的狮子</h4>
                    <p class="text-muted">框架架构狮</p>
                    <ul class="list-inline social-buttons">
                        <li class="list-inline-item">
                            <a href="https://segmentfault.com/u/nian_5aedc008c1353">
                                <i class="fab fa-blog"></i>
                            </a>
                        </li>
                        <li class="list-inline-item">
                            <a href="https://www.zhihu.com/people/nian-xi-11-67/activities">
                                <i class="fab fa-zhihu"></i>
                            </a>
                        </li>
                        <li class="list-inline-item">
                            <a href="https://weibo.com/5838347925/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1#_rnd1559028685666">
                                <i class="fab fa-weibo"></i>
                            </a>
                        </li>
                    </ul>
                </div>
            </div>
            <div class="col-sm-4">
                <div class="team-member">
                    <img class="mx-auto rounded-circle" src="img/team/t2.png" alt="指尖上的艺术">
                    <h4>指尖上的艺术</h4>
                    <p class="text-muted">设计师</p>
                    <ul class="list-inline social-buttons">
                        <li class="list-inline-item">
                            <a href="https://me.csdn.net/lvoelife">
                                <i class="fab fa-blog"></i>
                            </a>
                        </li>
                        <li class="list-inline-item">
                            <a href="JavaScript:void(0)">
                                <i class="fab fa-zhihu"></i>
                            </a>
                        </li>
                        <li class="list-inline-item">
                            <a href="JavaScript:void(0)">
                                <i class="fab fa-weibo"></i>
                            </a>
                        </li>
                    </ul>
                </div>
            </div>
            <div class="col-sm-4">
                <div class="team-member">
                    <img class="mx-auto rounded-circle" src="img/team/t3.png" alt="小小程序员">
                    <h4>小小程序员</h4>
                    <p class="text-muted">代码编写者</p>
                    <ul class="list-inline social-buttons">
                        <li class="list-inline-item">
                            <a href="JavaScript:void(0)">
                                <i class="fab fa-blog"></i>
                            </a>
                        </li>
                        <li class="list-inline-item">
                            <a href="JavaScript:void(0)">
                                <i class="fab fa-zhihu"></i>
                            </a>
                        </li>
                        <li class="list-inline-item">
                            <a href="JavaScript:void(0)">
                                <i class="fab fa-weibo"></i>
                            </a>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-lg-8 mx-auto text-center">
                <p class="large text-muted">我们拥有灵活的大脑、年轻的血液和坚毅的勇气，因为我们是新一代的程序员和设计师，身上肩负着责任感和使命感。
                    我们深受美国对华为的影响，渐渐地觉醒了，我们必须开发出属于我们国家的底层框架。因为有了实力，不怕强权的侵犯。积蓄能量，不辱使命。
                    <br><br>
                    我们希望有更多热爱编写底层代码的程序员和架构师，以及喜欢设计的设计师等加入我们。</p>
            </div>
        </div>
    </div>
</section>

<!-- Clients -->
<section class="py-5">
    <div class="container">
        <div class="row">
            <div class="col-md-3 col-sm-6">
                <a href="#">
                    <img class="img-fluid d-block mx-auto" src="img/logos/beantools.png" alt="beantools company">
                </a>
            </div>
            <div class="col-md-3 col-sm-6">
                <a href="https://segmentfault.com/">
                    <img class="img-fluid d-block mx-auto" src="img/logos/segmentfault.png" alt="segmentfault">
                </a>
            </div>
            <div class="col-md-3 col-sm-6">
                <a href="https://stackoverflow.com/">
                    <img class="img-fluid d-block mx-auto" src="img/logos/stackoverflow.png" alt="stackoverflow">
                </a>
            </div>
            <!--<div class="col-md-3 col-sm-6">-->
            <!--<a href="https://www.csdn.net/">-->
            <!--<img class="img-fluid d-block mx-auto" src="../img/logos/csdn.png" alt="csdn">-->
            <!--</a>-->
            <!--</div>-->
            <div class="col-md-3 col-sm-6">
                <a href="https://www.jianshu.com/">
                    <img class="img-fluid d-block mx-auto" src="img/logos/jianshu.png" alt="简书">
                </a>
            </div>
        </div>
    </div>
</section>

<!-- Contact -->
<section class="page-section" id="contact">
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h2 class="section-heading text-uppercase" style="color: black">联系我们</h2>
                <h3 class="section-subheading text-muted">
                    我们是一群以底层算法为基础的，并充满热情与责任感的团队，我们为什么着眼于底层算法？国家综合国力发展起来了，国家在未来会推动民企发展底层科技。
                    我们所做的正式底层算法，因为算法公司不是谁都可以复制的，而未来绝对是以底层算法为基础的科技。 在我国，底层算法还比较空缺，我们正好弥补这个空缺。
                    我们知道，只有在行业中树立了品牌，未来才有无尽可能。如果你想投资我们，如果你想了解我们的业务，如果你想与我们合作， 请联系我们。</h3>
                <h3 class="section-subheading text-muted">
                    如果你的算法很好，你想要开辟一番事业，你时刻保持着奋斗心，你时刻想着改变自己，那么，我们是你不错的平台，来吧，还犹豫什么？加入我们！！！请在富文本中填写简历</h3>
            </div>
        </div>
        <div class="row">
            <div class="col-lg-12">
                <form id="contactForm" name="contact" novalidate="novalidate">
                    <div class="row">
                        <div class="col-md-6">
                            <div class="form-group">
                                <input class="form-control" id="name" name="name" type="text" placeholder="姓名"
                                       required="required"
                                       data-validation-required-message="请输入真实姓名，便于我们联系">
                                <p class="help-block text-danger"></p>
                            </div>
                            <div class="form-group">
                                <input class="form-control" id="email" name="email" type="email" placeholder="邮箱"
                                       required="required"
                                       data-validation-required-message="请输入邮箱">
                                <p class="help-block text-danger"></p>
                            </div>
                            <div class="form-group">
                                <input class="form-control" id="phone" name="phone" type="tel" placeholder="手机号"
                                       required="required"
                                       data-validation-required-message="请填写真实的手机号">
                                <p class="help-block text-danger"></p>
                            </div>
                            <div class="form-group">
                                <select class="form-control" id="jobType" name="contactType" type="select"
                                        required="required"
                                        data-validation-required-message="联系类型">
                                    <option v-for="item in enums.ContactTypeEnum" :value="item.key">{{item.value}}</option>
                                </select>
                                <p class="help-block text-danger"></p>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <div class="form-group">
                                <input type="hidden" name="content" id="content">
                                <div id="contactContainer"></div>
                            </div>
                        </div>
                        <div class="col-lg-12 text-center">
                            <div id="success"></div>
                            <a  onclick="fns.sendContact(this)" class="btn btn-primary btn-xl text-uppercase">
                                提交信息，开创未来
                            </a>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</section>


<footer class="footer" id="footer">
    <div class="container">
        <div class="row">
            <div class="col-md-4">
                <span class="copyright">Copyright &copy<a href="https://www.superjson.com">http://www.superjson.com</a>  2019</span>
            </div>
            <div class="col-md-4" id="flag">
                <ul class="list-inline social-buttons">
                    <li class="list-inline-item">
                        <a href="#">
                            <i class="fab fa-weixin"></i>
                        </a>
                    </li>
                    <li class="list-inline-item">
                        <a href="#">
                            <i class="fab fa-qq"></i>
                        </a>
                    </li>
                    <li class="list-inline-item">
                        <a href="#">
                            <i class="fab fa-weibo"></i>
                        </a>
                    </li>
                </ul>
            </div>
            <div class="col-md-4">
                <ul class="list-inline quicklinks">
                    <li class="list-inline-item">
                        <a href="https://beian.aliyun.com/order/customerSiteView?siteId=5005451">浙ICP备18040155号-2</a>
                    </li>
                    <li class="list-inline-item">
                        <a href="JavaScript:void(0)" id="pageView">今日浏览量:</a>
                    </li>
                </ul>
            </div>
        </div>
    </div>
    <!-- Footer -->
    <div class="container" style="text-align: center;margin-bottom: 0.5%" id="flagImg">
        <ul class="list-inline social-buttons">
            <li class="list-inline-item">
                <img src="img/footer/wx.jpg" class="img-rounded" style="z-index: 100;display: none">
            </li>
            <li class="list-inline-item">
                <img src="img/footer/qq.jpg" class="img-rounded" style="z-index: 100;display: none">
            </li>
            <li class="list-inline-item">
                <img src="img/footer/wb.png" class="img-rounded" style="z-index: 100;display: none">
            </li>
        </ul>
    </div>
</footer>

<!-- Portfolio Modals -->

<!-- Modal 1 -->
<div class="portfolio-modal modal fade" id="propGetModal" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="close-modal" data-dismiss="modal">
                <div class="lr">
                    <div class="rl"></div>
                </div>
            </div>
            <div class="container">
                <div class="row">
                    <div class="col-lg-8 mx-auto">
                        <div class="modal-body">
                            <h2 class="text-uppercase">第<code> 1 </code>种获取属性值的方式</h2>
                            <p class="item-intro text-muted">当调用者调用 Property.getInstance(student)方法，便获取当前实例化的对象</p>
                            <img class="img-fluid d-block mx-auto"
                                 src="img/frameEg/propOper/propGet1.png" alt="">
                            <p>
                                正如上图所示。当调用者调用<code>Property.getInstance(student)</code>方法时，便实例化类<code>Property</code>对象。
                                调用者通过<code>instance.getProperty("address.detail")</code>获取属性实例化类对象的<code>student</code>的属性<code>address</code>
                                属性的<code>detail</code>的数值。
                            </p>
                            <h2 class="text-uppercase">第<code> 2 </code>种获取属性值的方式</h2>
                            <p class="item-intro text-muted">当调用者调用
                                Property.getInstance()方法，不获取当前实例化的对象，待getProperty方法中传递</p>
                            <img class="img-fluid d-block mx-auto"
                                 src="img/frameEg/propOper/propGet2.png" alt="第<code> 2 </code>种获取属性值的方式">
                            <p>
                                正如上图所示。当调用者调用<code>Property.getInstance()</code>方法时，虽然实例化类<code>Property</code>对象，但是没有赋对象的初值。
                                但是，调用者通过调用<code>instance.getProperty("address.detail", student)</code>可以给赋值，同时，属性实例化类对象的<code>student</code>的属性
                                <code>address</code>属性的<code>detail</code>的数值。
                            </p>
                            <ul class="list-inline">
                                <li>Date: 2019年05月26日 22:38</li>
                                <li>功能: 获取关联对象和当前对象的属性值</li>
                                <li>作用：这个对于后端程序员进行数据的过滤非常重要。后端把没必要的数据过滤掉后，再把过滤后的数据
                                    传递给前端程序员。本框架中的数据过滤，也是采用这种方式。
                                </li>
                            </ul>
                        </div>
                        <button class="btn btn-primary" data-dismiss="modal" type="button">
                            <i class="fas fa-times"></i>
                            关闭
                        </button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- Modal 2 -->
<div class="portfolio-modal modal fade" id="propSetModal" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="close-modal" data-dismiss="modal">
                <div class="lr">
                    <div class="rl"></div>
                </div>
            </div>
            <div class="container">
                <div class="row">
                    <div class="col-lg-8 mx-auto">
                        <div class="modal-body">
                            <h2 class="text-uppercase">第<code> 1 </code>种设置属性值的方式</h2>
                            <p class="item-intro text-muted">当调用者调用 Property.getInstance(student)方法，便获取当前实例化的对象</p>
                            <img class="img-fluid d-block mx-auto"
                                 src="img/frameEg/propOper/propSet2.png" alt="">
                            <p>
                                正如上图所示。当调用者调用<code>Property.getInstance(student)</code>方法时，便实例化类<code>Property</code>对象。
                                调用者通过调用<code>instance.setProperty("address.detail", "浙江省杭州市西湖区")</code>设置实例化类对象的<code>student</code>的属性<code>address</code>
                                属性值。如果<code>address</code>对象不存在，需要创建该对象，然后，再设置对象<code>address</code>属性的<code>detail</code>属性值。
                            </p>
                            <h2 class="text-uppercase">第<code> 2 </code>种设置属性值的方式</h2>
                            <p class="item-intro text-muted">当调用者调用
                                Property.getInstance()方法，不获取当前实例化的对象，待getProperty方法中传递</p>
                            <img class="img-fluid d-block mx-auto"
                                 src="img/frameEg/propOper/propSet1.png" alt="第<code> 2 </code>种获取属性值的方式">
                            <p>
                                正如上图所示。当调用者调用<code>Property.getInstance()</code>方法时，虽然实例化类<code>Property</code>对象，但是没有赋对象的初值。
                                调用者通过调用<code>instance.setProperty("address.detail",
                                "浙江省杭州市西湖区",student)</code>传递实例化的对象<code>student</code>，并设置其属性<code>address</code>
                                的属性值。如果<code>address</code>对象不存在，需要创建该对象，然后，再设置对象<code>address</code>属性的<code>detail</code>属性值。
                            </p>
                            <ul class="list-inline">
                                <li>Date: 2019年05月26日 22:38</li>
                                <li>功能: 获取关联对象和当前对象的属性值</li>
                                <li>作用：这个对于后端程序员实现对象的克隆是非常的重要。也可以通过这个方法，实现<a href="https://spring.io/">spring</a>的对象属性的自动填充
                                </li>
                            </ul>
                        </div>
                        <button class="btn btn-primary" data-dismiss="modal" type="button">
                            <i class="fas fa-times"></i>
                            关闭
                        </button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>


<!-- Modal 3 -->
<div class="portfolio-modal modal fade" id="notNullModal" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="close-modal" data-dismiss="modal">
                <div class="lr">
                    <div class="rl"></div>
                </div>
            </div>
            <div class="container">
                <div class="row">
                    <div class="col-lg-8 mx-auto">
                        <div class="modal-body">
                            <!-- Project Details Go Here -->
                            <h2 class="text-uppercase">属性空值判断</h2>
                            <p class="item-intro text-muted">指定哪些属性为空，哪些属性不为空，是否包含父类属性的空值判断</p>
                            <img class="img-fluid d-block mx-auto" src="img/frameEg/notNull/notnull1.png"
                                 alt="属性空值判断">
                            <p>
                                正如上图所示。当调用者调用<code>
                                NotNullHandler.getInstance()</code>方法时，虽然实例化类<code>NotNullHandler</code>对象。
                                调用者通过调用<code>validate(student)</code>来验证当前类对象<code>student</code>的属性。
                            <ul class="list-inline">
                                <li>如果某些属性在<code>ignore</code>数组中，这些属性允许为空</li>
                                <li>如果某些属性在<code>notNull</code>数组中，这些属性不允许为空</li>
                                <li>如果实体类上的<code>includingSupClass == true</code>，验证器会验证当前类对象的父类属性</li>
                            </ul>
                            如果注解在属性上面，不用上面的任何字段，就足以正面该属性不能为空。
                            <br>
                            <img class="img-fluid d-block mx-auto" src="img/frameEg/notNull/notnull2.png"
                                 alt="注解在属性上的空值判断">
                            </p>
                            <ul class="list-inline">
                                <li>日期: 2019年05月27日 19:25</li>
                                <li>功能: 属性上的注解验证器</li>
                            </ul>
                            <button class="btn btn-primary" data-dismiss="modal" type="button">
                                <i class="fas fa-times"></i>
                                关闭
                            </button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- Modal 4 -->
<div class="portfolio-modal modal fade" id="cloneModal" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="close-modal" data-dismiss="modal">
                <div class="lr">
                    <div class="rl"></div>
                </div>
            </div>
            <div class="container">
                <div class="row">
                    <div class="col-lg-8 mx-auto">
                        <div class="modal-body">
                            <!-- Project Details Go Here -->
                            <h2 class="text-uppercase">克隆对象</h2>
                            <p class="item-intro text-muted">根据实例化的对象，或实例化对象的指定属性的集合，克隆出当前类的对象或新类的对象</p>
                            <img class="img-fluid d-block mx-auto" src="img/frameEg/clone/clone1.png" alt="克隆对象">
                            <p>
                                正如上图所示。<code>Student</code>类中嵌套<code>Address</code>类，<code>Address</code>也有自己的属性。
                                <br>
                                也许，学生类的对象或对象集来源于数据库， 但是，前端工作人员只想获取学生类中的<strong>姓名</strong>和<strong>
                                详细地址</strong>，于是，我们令创建一个名为<code>StudentAddress</code>来存储转化后的数据。
                                <br>
                                输出结果为:<code>StudentAddress{name='jack zhu', detail='浙江省杭州市西湖区'}</code>
                                <br>
                                在实际的开发中。我们需要获取某个实体类中关联对象的属性，并将其组装成新对象。比如说，你自定义一个实体类，该类嵌套你定义的其他实体类，
                                同时，其他实体类又嵌套你定义的另外实体类，如此循环下去……但是，你只想获取当前类和其他类的某些属性值，将其封装成一个新的类，
                                并向前端传递该新类的实例化对象。
                                <br>
                                于是 你可以使用该框架的对象克隆技术，其有几个方法，分别返回给你一个对象，对象的容器...
                                <br>
                                <img class="img-fluid d-block mx-auto" src="img/frameEg/clone/clone2.png" alt="克隆对象">
                                <br>
                                输出结果为：
                            <ul class="list-inline">
                                <li>StudentAddress{name='jack zhu0', detail='浙江省杭州市西湖区'},</li>
                                <li>StudentAddress{name='jack zhu1', detail='浙江省杭州市西湖区'},</li>
                                <li>StudentAddress{name='jack zhu2', detail='浙江省杭州市西湖区'},</li>
                                <li>StudentAddress{name='jack zhu3', detail='浙江省杭州市西湖区'},</li>
                                <li>StudentAddress{name='jack zhu4', detail='浙江省杭州市西湖区'}</li>
                            </ul>
                            </p>
                            <ul class="list-inline">
                                <li>日期: 2019年05月27日 21:25</li>
                                <li>功能: 对象的克隆</li>
                            </ul>
                            <button class="btn btn-primary" data-dismiss="modal" type="button">
                                <i class="fas fa-times"></i>
                                Close Project
                            </button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- Modal 5 -->
<div class="portfolio-modal modal fade" id="portfolioModal5" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="close-modal" data-dismiss="modal">
                <div class="lr">
                    <div class="rl"></div>
                </div>
            </div>
            <div class="container">
                <div class="row">
                    <div class="col-lg-8 mx-auto">
                        <div class="modal-body">
                            <!-- Project Details Go Here -->
                            <h2 class="text-uppercase">签名原串</h2>
                            <p class="item-intro text-muted">这是加签之前的待使用的签名原串</p>
                            <img class="img-fluid d-block mx-auto" src="img/frameEg/sign/sign1.png" alt="签名原串">
                            <p>我们在调用第三方接口时，比如第三方支付接口、验证银行卡接口、短信验证码接口……其往往都需要加密。加密的前提，是生成签名原串。
                                或许，你可以使用<code> SignUtill.signJsonSrcToAsc("&", body)</code>方法，其生成按字母升序排序的签名原串，生成结果为：
                            <pre style="white-space: pre-wrap;word-wrap: break-word;">
oid_partner=122323232332&sign_type=RSA&sing=seeyouagain&timestamp=2019-05-28+0800&userreq_ip=127.0.0.1&version=1.2
                             </pre>
                            <br>
                            当然，除了这个方法，该类也提供很多方法。再举一例子，我们可以按照对象的方式生成签名原串，如果该对象的属性为空，其参与
                            签名，也就是，不包含在签名原串中，如图所示：
                            <img class="img-fluid d-block mx-auto" src="img/frameEg/sign/sign2.png" alt="签名原串">
                            <pre style="white-space: pre-wrap;word-wrap: break-word;">
city=杭州市&county=西湖区&province=浙江省
                             </pre>
                            </p>
                            <ul class="list-inline">
                                <li>日期: 2019年05月27日 11:34</li>
                                <li>功能: 各种方式的签名原串的实现方法</li>
                                <li>作用:高性能的的方式实现了排序， 满足大多数生成第三方签名原串的需求。。。</li>
                            </ul>
                            <button class="btn btn-primary" data-dismiss="modal" type="button">
                                <i class="fas fa-times"></i>
                                关闭
                            </button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</body>

<!-- Bootstrap core JavaScript -->
<script src="js/plugins/swiper.js" type="text/javascript"></script>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=	f4f28d6f202b8de52c446e6bdfb3a515"></script>
<script src="js/plugins/swiper.min.js" type="text/javascript"></script>
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js" type="text/javascript"></script>
<script src="js/plugins/vue.js" type="text/javascript"></script>
<script src="js/plugins/summernote/summernote.js"></script>
<script src="js/plugins/summernote/summernote-zh-CN.js"></script>
<script src="js/plugins/summernote/summernote-active.js"></script>
<script src="js/plugins/layui/layui.js" type="text/javascript"></script>
<script src="js/plugins/layui/layui.all.js" type="text/javascript"></script>
<script src="js/plugins/jquery.md5.js" type="text/javascript"></script>
<script src="vendor/jquery-easing/jquery.easing.min.js" type="text/javascript"></script>
<script src="js/plugins/jqBootstrapValidation.js" type="text/javascript"></script>
<script src="js/plugins/agency.min.js" type="text/javascript"></script>
<script src="js/pageJs/constant.js" type="text/javascript"></script>
<script src="js/pageJs/utils.js" type="text/javascript"></script>
<script src="js/pageJs/index.js" type="text/javascript"></script>

</html>
